/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package otcapp.experto;

import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import otcapp.experto.excepciones.ExpertoSeguridadException;
import otcapp.seguridad.Perfil;
import otcapp.seguridad.Permiso;
import otcapp.seguridad.Usuario;
import persistencia.exceptions.ExcepcionFachada;
import persistencia.Fachada;

/**
 *
 * @author diego
 */
public class ExpertoSeguridad extends Experto {

    public List buscarPerfiles() {
        Criteria orden = Fachada.getInstancia().crearCriterio(Perfil.class).addOrder(Order.asc("nombrePerfil"));
        return Fachada.getInstancia().buscar(Perfil.class, orden);

    }

    public List buscarPermisos() {
        Criteria orden = Fachada.getInstancia().crearCriterio(Permiso.class).addOrder(Order.asc("nombrePermiso"));
        return Fachada.getInstancia().buscar(Permiso.class, orden);
    }

    public void guardarPerfil(Perfil perfilSeleccionado) throws ExpertoSeguridadException {
        try {
            if (perfilSeleccionado.getId() == null) {
                Criteria nombrePerfil = Fachada.getInstancia().crearCriterio(Perfil.class).add(Restrictions.eq("nombrePerfil", perfilSeleccionado.getNombrePerfil()));
                List<Perfil> perfilesEncontrados = Fachada.getInstancia().buscar(Perfil.class, nombrePerfil);
                if (!perfilesEncontrados.isEmpty()) {
                    throw new ExpertoSeguridadException("El nombre de perfil ingresado corresponde con un perfil existente");
                }
            }
            Fachada.getInstancia().guardar(perfilSeleccionado);
        } catch (ExcepcionFachada ex) {
            throw new ExpertoSeguridadException("Error al guardar perfil");
        }
    }
    
    public List buscarUsuarios(){
        Criteria orden = Fachada.getInstancia().crearCriterio(Usuario.class).addOrder(Order.asc("nombreUsuario"));
        return Fachada.getInstancia().buscar(Usuario.class, orden);
    }
}
